package com.ytjj.qmyx.supplychain.common.model.request;

import lombok.Data;
import lombok.ToString;

import javax.validation.Valid;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 订单报关附加信息
 */
@Data
@ToString
public class OrderAttachInfoRequest implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 子订单编号
     */
    @NotBlank(message = "子订单编号不能为空")
    private String childOrderNo;
    /**
     * 用户id，销售端user_id
     */
    @NotBlank(message = "用户id不能为空")
    private String buyerRegNo;
    /**
     * 订购人的真实姓名
     */
    @NotBlank(message = "订购人姓名不能为空")
    private String buyerName;
    /**
     * 订购人电话，海关监管对象的电话，要求实际联系电话
     */
    @NotBlank(message = "订购人电话不能为空")
    private String buyerTelephone;
    /**
     * 订购人证件类型:1-身份证，2-其它。限定为身份证，填写“1”。
     */
    private Integer buyerIdType;
    /**
     * 订购人证件号码
     */
    @NotBlank(message = "证件号码不能为空")
    private String buyerIdNumber;
    /**
     * 支付企业代码,支付企业的海关注册登记编号。(wx/alipay在海关注册登记编号)
     */
    @NotBlank(message = "支付企业代码不能为空")
    private String payCode;
    /**
     * 支付企业名称,支付企业在海关注册登记的企业名称(wx/alipay在海关注册登记名称)
     */
    @NotBlank(message = "支付企业名称不能为空")
    private String payName;
    /**
     * 交易唯一编号（微信支付后的验证id）
     */
    @NotBlank(message = "交易唯一编号不能为空")
    private String payTransactionId;
    /**
     * 收货人姓名，必须与电子运单的收货人姓名一致
     */
    @NotBlank(message = "收货人姓名不能为空")
    private String consignee;
    /**
     * 收货人联系电话，必须与电子运单的收货人电话一致
     */
    @NotBlank(message = "收货人联系电话不能为空")
    private String consigneeTelephone;
    /**
     * 收货地址，必须与电子运单的收货地址一致
     */
    @NotBlank(message = "收货人地址不能为空")
    private String consigneeAddress;
    /**
     * 收货人行政区划代码
     */
    private String consigneeDistrict;
    /**
     * 订单备注
     */
    private String note;
    /**
     * 下单时间
     */
    private Date orderTime;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 修改时间
     */
    private Date updateTime;
    /**
     * 核验机构:1-银联 2-网联 3-其他
     */
    @NotBlank(message = "核验机构不能为空")
    private String verDept;
    /**
     * 实际交易金额
     */
    @DecimalMin(value = "0.01", message = "实际交易金额必须大于0")
    private BigDecimal totalAmount;
    /**
     * 销售端id
     */
    private String shopId;
    /**
     * 用户支付的类型。1-APP 2-PC 3-扫码 4-其他
     */
    @NotNull(message = "支付类型不能为空")
    private Integer payType;
    /**
     * 交易支付时间(YYYYMMDDhhmmss)
     */
    private Date tradingTime;
    /**
     * 电商平台的对公银行卡号(在支付企业登记的)
     */
    @NotBlank(message = "电商平台对公银行卡号不能为空")
    private String recpAccount;
    /**
     * 收款企业名称(电商平台企业全称)
     */
    @NotBlank(message = "收款企业名称不能为空")
    private String recpName;
    /**
     * 收款企业代码
     */
    private String recpCode;
    /**
     * 支付原始请求
     */
    @NotBlank(message = "支付原始请求不能为空")
    private String initalRequest;
    /**
     * 支付原始响应
     */
    @NotBlank(message = "支付原始响应不能为空")
    private String initalResponse;
    /**
     * 商品信息
     */
    @NotNull(message = "订单商品信息不能为空")
    @Size(min = 1, message = "订单商品信息不能为空")
    @Valid
    private List<OrderItemAttachInfoRequest> item;
}
